home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Text⁄Files / manxarcv.c
C/C++ Source or Header  |  1994-03-25  |  2KB  |  76 lines

  1. /*     manxarcv.c -- unpack a Manx format archive
  2.  *
  3.  *     History:  8/2/85     Winkler     Created.
  4.  *
  5.  */
  6.  
  7. #include <stdio.h>
  8.  
  9. #define MAXNAMELEN 100
  10. #define CNTRLL 0x0c
  11. #define CNTRLZ 0x1a
  12.  
  13. main(argc,argv)
  14.         int argc; char *argv[];
  15. {
  16.         int c; FILE * arc;
  17.  
  18.         if (argc != 2)
  19.         {
  20.                 fprintf(stderr, "Usage: manxarcv archivename\n");
  21.                 exit(1);
  22.         }
  23.  
  24.         if ((arc = fopen(argv[1], "r")) == (FILE *) NULL)
  25.         {
  26.                 fprintf(stderr, "Can't open %s\n", argv[1]);
  27.                 exit(1);
  28.         }
  29.  
  30.         while ( (c = getc(arc)) != EOF )
  31.         {
  32.                 switch( c )
  33.                 {
  34.                         case CNTRLL : UnPackOneFile(arc) ; break ;
  35.                         case CNTRLZ : (void) fclose(arc) ; exit(0) ;
  36.                         default : fprintf(stderr, "Ignoring %c\n", c) ;
  37.                                 /* default case is only reached if archive
  38.                                  * is not in valid format
  39.                                  */
  40.                 }
  41.         }
  42. }
  43.  
  44. UnPackOneFile( arc )
  45.         FILE * arc ;
  46. {
  47.         FILE * newFile ; char name[ MAXNAMELEN ] ; int c ;
  48.  
  49.         /* first read the file name */
  50.                 (void) fscanf( arc, "%s\n", name ) ;
  51.                 name[ strlen(name) ] = 0 ; /* throw away newline */
  52.                 printf("Extracting %s...", name) ;
  53.  
  54.         /* open the new file */
  55.                 if ( (newFile = fopen(name, "w")) == (FILE *) NULL )
  56.                 {
  57.                         fprintf(stderr, "Can't write file %s\n", name) ;
  58.                         exit(1) ;
  59.                 }
  60.  
  61.         /* copy everything up to the next ^L or ^Z into the new file */
  62.                 while ( (c = getc(arc)) != EOF )
  63.                 {
  64.                         if ( c == CNTRLL || c == CNTRLZ ) 
  65.                         {
  66.                                 (void) ungetc( c, arc ) ;
  67.                                 break ;
  68.                         }
  69.                         else (void) putc( c, newFile ) ;
  70.                 }
  71.  
  72.         /* close the new file */
  73.                 printf("Done.\n", name) ;
  74.                 (void) fclose( newFile ) ;
  75. }
  76.